<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>垃圾回收机制</title>
</head>

<body>
  <script>

    //map.js
    global.gc(); // 0 每次查询内存都先执行gc()再memoryUsage()，是为了确保垃圾回收，保证获取的内存使用状态准确

    function usedSize() {
      const used = process.memoryUsage().heapUsed;
      return Math.round((used / 1024 / 1024) * 100) / 100 + "M";
    }

    console.log(usedSize()); // 1 初始状态，执行gc()和memoryUsage()以后，heapUsed 值为 1.64M

    var map = new Map();
    var b = new Array(5 * 1024 * 1024);

    map.set(b, 1);

    global.gc();
    console.log(usedSize()); // 2 在 Map 中加入元素b，为一个 5*1024*1024 的数组后，heapUsed为41.82M左右

    b = null;
    global.gc();

    console.log(usedSize()); // 3 将b置为空以后，heapUsed 仍为41.82M，说明Map中的那个长度为5*1024*1024的数组依然存在


    // weakmap.js
    function usedSize() {
      const used = process.memoryUsage().heapUsed;
      return Math.round((used / 1024 / 1024) * 100) / 100 + "M";
    }

    global.gc(); // 0 每次查询内存都先执行gc()再memoryUsage()，是为了确保垃圾回收，保证获取的内存使用状态准确
    console.log(usedSize()); // 1 初始状态，执行gc()和 memoryUsage()以后，heapUsed 值为 1.64M
    var map = new WeakMap();
    var b = new Array(5 * 1024 * 1024);

    map.set(b, 1);

    global.gc();
    console.log(usedSize()); // 2 在 Map 中加入元素b，为一个 5*1024*1024 的数组后，heapUsed为41.82M左右

    b = null;
    global.gc();

    console.log(usedSize()); // 3 将b置为空以后，heapUsed 变成了1.82M左右，说明WeakMap中的那个长度为5*1024*1024的数组被销毁了

  </script>
</body>

</html>